package com.hly.musicbackground.model.user.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.hly.musicbackground.Enum.UserLogEnum;
import com.hly.musicbackground.domain.UserLog;
import com.hly.musicbackground.model.admin.VO.ActiveStatisticsVO;
import com.hly.musicbackground.model.admin.VO.ActiveUserLogVO;
import com.hly.musicbackground.model.admin.VO.UserLogVO;

import java.util.List;

public interface UserLogService extends IService<UserLog> {

    /**
     * 添加用户日志
     * @param uid 用户id【必填】
     * @param link 外连接【选填】
     * @param userLogType 用户日志类型【必填】
     * @param describe 日志描述【选填】
     * */
    boolean addLog(int uid, int link, String userLogType, String describe);

    /**
     * 添加用户日志
     * @param uid 用户id【必填】
     * @param link 外连接【选填】
     * @param logEnum 用户日志类型【必填】
     * @param describe 日志描述【选填】
     * */
    boolean addLog(int uid, int link, UserLogEnum logEnum, String describe);

    /**
     * 添加用户日志【尝试获取uid，若没有则不添加】
     * @param link 外连接【选填】
     * @param userLogType 用户日志类型【必填】
     * @param describe 日志描述【选填】
     * */
    boolean addUserLogOrFail(int link, String userLogType, String describe);

    /**
     * 添加用户日志【尝试获取uid，若没有则不添加】
     * @param link 外连接【选填】
     * @param logEnum 用户日志类型【必填】
     * @param describe 日志描述【选填】
     * */
    boolean addUserLogOrFail(int link, UserLogEnum logEnum, String describe);

    /**
     * 添加用户日志【尝试获取uid，若没有则不添加】
     * @param logEnum 用户日志类型【必填】
     * @param describe 日志描述【选填】
     * */
    boolean addUserLogOrFail(UserLogEnum logEnum, String describe);


    /**
     * 添加用户日志【尝试获取uid，若没有则不添加】
     * @param logEnum 用户日志类型【必填】
     * */
    boolean addUserLogOrFail(UserLogEnum logEnum);

    /**
     * 定时删除一年以前的日志
     * */
    void calmTimeDelete();

    /**
     * 查询一段时间的活跃度按个人分类
     * */
    List<ActiveUserLogVO> getActiveUserList(int day, int month, int limit);

    /**
     * 获取近期日志记录
     * */
    List<UserLogVO> getRecentLogList(int page, int limit, int uid);

    /**
     * 按日期获取活跃度
     * */
    ActiveStatisticsVO getDateActive(int i, boolean b);
}
